<.button_dropdown text="Actions" class="justify-center w-full sm:w-50">
  <:option>
    <.link href={rss_feed_url(@conn, @source)} x-data="{ copied: false }" x-on:click={~s"
          $event.preventDefault();
          copyWithCallbacks(
            '#{rss_feed_url(@conn, @source)}',
            () => copied = true,
            () => copied = false
          )
        "}>
      Copy RSS Feed
      <span x-show="copied" x-transition.duration.150ms><.icon name="hero-check" class="ml-2 h-4 w-4" /></span>
    </.link>
  </:option>
  <:option>
    <span x-data="{ copied: false }" x-on:click={~s"
        copyWithCallbacks(
          String.raw`#{Jason.Formatter.pretty_print(Phoenix.json_library().encode!(@source))}`,
          () => copied = true, 
          () => copied = false
        )
      "}>
      Copy JSON
      <span x-show="copied" x-transition.duration.150ms><.icon name="hero-check" class="ml-2 h-4 w-4" /></span>
    </span>
  </:option>
  <:option>
    <.link href={~p"/sources/new?template_id=#{@source}"} method="get">
      Use as Template
    </.link>
  </:option>
  <:option>
    <div class="h-px w-full bg-bodydark2"></div>
  </:option>
  <:option :if={@source.download_media}>
    <.link
      href={~p"/sources/#{@source}/force_download_pending"}
      method="post"
      data-confirm="Are you sure you want to force a download of all pending media items? This isn't normally needed."
    >
      Download Pending
    </.link>
  </:option>
  <:option :if={@source.download_media}>
    <.link
      href={~p"/sources/#{@source}/force_redownload"}
      method="post"
      data-confirm="Are you sure you want to re-download all currently downloaded media items? This doesn't upgrade your media, but will download any missing files if your settings have changed. This isn't normally needed."
    >
      Redownload Existing
    </.link>
  </:option>
  <:option>
    <.link
      href={~p"/sources/#{@source}/force_index"}
      method="post"
      data-confirm="Are you sure you want to force an index of this source? This isn't normally needed."
    >
      Force Index
    </.link>
  </:option>
  <:option>
    <.link
      href={~p"/sources/#{@source}/force_metadata_refresh"}
      method="post"
      data-confirm="Are you sure you want to refresh this source's metadata?"
    >
      Refresh Metadata
    </.link>
  </:option>
  <:option>
    <.link
      href={~p"/sources/#{@source}/sync_files_on_disk"}
      method="post"
      data-confirm="Are you sure you want to sync files? This will update media items if their files have been deleted. File addition or moves are not detected. This isn't normally needed."
    >
      Sync Files on Disk
    </.link>
  </:option>
  <:option>
    <div class="h-px w-full bg-bodydark2"></div>
  </:option>
  <:option>
    <.link
      href={~p"/sources/#{@source}"}
      method="delete"
      data-confirm="Are you sure you want to delete this source (leaving files in place)? This cannot be undone."
    >
      Delete Source
    </.link>
  </:option>
  <:option>
    <.link
      href={~p"/sources/#{@source}?delete_files=true"}
      method="delete"
      data-confirm="Are you sure you want to delete this source and it's files on disk? This cannot be undone."
      class="mt-5 md:mt-0"
    >
      Delete Source + Files
    </.link>
  </:option>
</.button_dropdown>
